package wxapiservice

import (
	"mpa-dance-push/src/configs"
	"mpa-dance-push/src/logger"

	"github.com/fatih/structs"
	"github.com/levigross/grequests"
)

// TemplateMessage 微信模板消息 api
type TemplateMessage struct {
	URL   string
	Query struct {
		// require 接口调用凭证
		AccessToken string
		// require 接收者（用户）的 openid
		Touser string
		// require 所需下发的模板消息的id
		TemplateID string
		// 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转。
		Page string
		// require 表单提交场景下，为 submit 事件带上的 formId；支付场景下，为本次支付的 prepay_id
		FormID string
		// 模板内容，不填则下发空模板。具体格式请参考示例。
		Data interface{}
		// 模板需要放大的关键词，不填则默认无放大
		EmphasisKeyword string
	}
}

// Send 发送模板消息
func (wxAPI *TemplateMessage) Send() (configs.WxTemplateMessageResponse, error) {
	var queryMap map[string]string
	resultJSON := configs.WxTemplateMessageResponse{}
	url := wxAPI.URL

	_queryMap := structs.Map(wxAPI.Query)
	for k, v := range _queryMap {
		queryMap[k] = v.(string)
	}
	ro := &grequests.RequestOptions{
		Data: queryMap,
	}
	response, err := grequests.Post(url, ro)
	if err != nil {
		response.JSON(&resultJSON)
		if resultJSON.Errcode != 0 {
			logger.Warning.Printf("template message send fail: ErrorCode: %d; ErrorMessage: %s", resultJSON.Errcode, resultJSON.Errmsg)
			// switch resultJSON.Errcode {
			// case 40037:
			// }
		}
		return resultJSON, nil
	}
	return resultJSON, err
}
